home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Libraries / PlayerPRO 4.5.8 / PlayerPRO 4.5.8 Dev.Kit / MADH Library 4.5 / BeOS Examples / DriverClass.cpp next >
Encoding:
C/C++ Source or Header  |  1997-02-25  |  2.4 KB  |  106 lines  |  [TEXT/EDIT]

  1. /********************                        ***********************/
  2. //
  3. //    Player PRO 4.5x -- MAD Class for BeOS -
  4. //
  5. //    Library Version 4.5
  6. //
  7. //    To use with MAD Library for BeOS: CodeWarrior
  8. //
  9. //    Antoine ROSSET
  10. //    16 Tranchees
  11. //    1206 GENEVA
  12. //    SWITZERLAND
  13. //
  14. //    Thank you for your interest in PlayerPRO !
  15. //
  16. //    FAX:            (+41 22) 346 11 97
  17. //    PHONE:             (+41 79) 203 74 62
  18. //    Internet:         rosset@dial.eunet.ch
  19. //
  20. /********************                        ***********************/
  21.  
  22. #include "RDriver.h"
  23. #include "DriverClass.h"
  24.  
  25. static MADDriverRec                *MADDriver;
  26.         
  27. MADDriverClass::MADDriverClass( MADDriverSettings *init)
  28. {
  29.     if( MADInitLibrary( "Plugs", init->sysMemory) != noErr) debugger("Small Problem I...");
  30.     MADDriver = MADGetMADDriverPtr();
  31.     
  32.     if( MADCreateDriver( init) != noErr) debugger("Small Problem II...");
  33.     
  34.     /////////////
  35.     
  36.     mPlayer = new BAudioSubscriber("TrackerPlayer");
  37.     if (mPlayer)
  38.     {
  39.         long    error, chan;
  40.         
  41.         error = mPlayer->Subscribe(B_DAC_STREAM,B_INVISIBLE_SUBSCRIBER_ID,TRUE);
  42.         
  43.         if( init->outPutMode == MonoOutPut) chan = 1;
  44.         else chan = 2;
  45.         
  46.         error = mPlayer->SetDACSampleInfo( init->outPutBits/8,  chan, B_BIG_ENDIAN, B_LINEAR_SAMPLES);
  47.         error = mPlayer->SetSamplingRate( init->outPutRate>>16L );
  48.         
  49.     /*    long                         bufSize, bufCount, subCount;
  50.         bool                         isRunning;
  51.         subscriber_id                clique;
  52.         
  53.         error = mPlayer->GetStreamParameters(&bufSize, &bufCount, &isRunning, &subCount, &clique);
  54.     */    
  55.         error = mPlayer->EnterStream(NULL, FALSE, NULL,trackerStreamPlay, NULL, TRUE);
  56.     }
  57. }
  58.  
  59. MADDriverClass::~MADDriverClass()
  60. {
  61.     delete mPlayer;
  62.     
  63.     MADDisposeDriver();
  64.     MADDisposeLibrary();
  65. }
  66.  
  67. extern "C" {
  68. Boolean DirectSave( Ptr myPtr, MADDriverSettings *driverType, MADDriverRec *intDriver);
  69. }
  70.  
  71. bool MADDriverClass::trackerStreamPlay(void *user, char *buffer, long count)
  72. {
  73.     if( count != 4096) debugger("count error");
  74.     
  75.     DirectSave( (Ptr) buffer, &MADDriver->DriverSettings, MADDriver);
  76.     
  77.     if( MADDriver->DriverSettings.outPutBits == 8)
  78.     {
  79.         for( long i = 0; i < count; i++) buffer[i] -= 0x80;
  80.     }
  81.     
  82.     return true;
  83. }
  84.  
  85. void MADDriverClass::LoadMusic( BFile & file)
  86. {
  87.     file.Open(O_RDWR);
  88.     
  89.     long len = file.Seek(0, 2);
  90.     char * ptr = new char[len];
  91.     file.Seek(0, 0);
  92.     file.Read(ptr, len);
  93.     
  94.     ///////////
  95.     
  96.     if( MADLoadMusicPtr( (Ptr) ptr)) debugger( "error LoadPtr");
  97.     
  98.     if( MADStartDriver()) debugger( "error MADPlay");                        // Turn interrupt driver function ON
  99.     MADPlayMusic();                                                            // Read the current partition in memory
  100.     
  101.     //////////
  102.     
  103.     file.Close();
  104.     
  105.     delete[] ptr;
  106. }